package saei.bean;

import java.util.Date;
import javax.persistence.*;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.ForeignKey;

import saei.bean.vo.EquipoAsignadoVO;

@SuppressWarnings("serial")
@Entity
@Table(name="Equipo_Asignado")
public class EquipoAsignado extends EntidadPersistente
{
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
	@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
    @ForeignKey(name="fk_equipo_asignado_equipo")
    @JoinColumn(name="id_equipo")
    private Equipo equipo;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="fec_asignacion")
    private Date fechaAsignacion;
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="fec_baja")
    private Date fechaBaja;
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
	@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
    @ForeignKey(name="fk_equipo_asignado_asignacion")
    @JoinColumn(name="id_asignacion")
    private Asignacion asignacion;

	public EquipoAsignado() {}

    public EquipoAsignado(Equipo equipo, Asignacion asignacion) {
    	this.equipo = equipo;
    	this.asignacion = asignacion;
    	this.fechaAsignacion = new Date();
    }

    public void setEquipo(Equipo equipo){
        this.equipo = equipo;
    }
    
    public Equipo getEquipo() {
    	return equipo;
    }

    public void setFechaAsignacion(Date fechaAsignacion) {
        this.fechaAsignacion = fechaAsignacion;
    }
    
    public Date getFechaAsignacion() {
            return fechaAsignacion;
    }

    public void setFechaBaja(Date fechaBaja) {
        this.fechaBaja = fechaBaja;
    }
    
    public Date getFechaBaja() {
            return fechaBaja;
    }
    
    public Asignacion getAsignacion() {
            return asignacion;
    }

    public void setAsignacion(Asignacion asignacion) {
		this.asignacion = asignacion;
	}
    
    public void inactivar() {
    	this.fechaBaja = new Date();
    }

    public boolean isActivo(){
    	return (fechaBaja == null);
    }
    
    public boolean isCpu() {
    	return this.equipo.getClass().equals(Cpu.class);
    }
    
    public EquipoAsignadoVO getVO() {
    	EquipoAsignadoVO retVal = new EquipoAsignadoVO();
    	
    	retVal.setNumeroAsignacion(asignacion.getNumeroAsignacion());
    	retVal.setNumeroSerie(equipo.getNumeroSerie());
    	retVal.setTipoEquipo(equipo.getClass().getSimpleName());
    	retVal.setMarcaEquipo(equipo.getMarca().getDescripcion());
    	retVal.setModeloEquipo(equipo.getModelo().getDescripcion());
    	retVal.setFechaAsignacion(fechaAsignacion);
    	retVal.setFechaBaja(fechaBaja);
    	
		return retVal;
	}
}